﻿#pragma once
#include "zyCtrol.h"

namespace DarkMoonUI {

	class zyMonthCal : public  zyCtrol
	{
	public:
		zyMonthCal();
		~zyMonthCal();
		
		static LRESULT WINAPI zyMonthCal_ChildWndProc(zyObject* obj, HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam, BOOL* bHandle);

		BOOL 创建(HWND 参数_父窗口, const std::wstring& 参数_标题 = L"", POINT 参数_位置 = POINT{ 0, 0 }, POINT 参数_尺寸 = POINT{ 60, 120 },
			int 参数_ID = 0, int 参数_窗口风格 = 0, int 参数_扩展风格 = 0);
		BOOL 创建(zyWindow& 参数_父窗口, const std::wstring& 参数_标题 = L"", POINT 参数_位置 = POINT{ 0, 0 }, POINT 参数_尺寸 = POINT{ 60, 120 },
			int 参数_ID = 0, int 参数_窗口风格 = 0, int 参数_扩展风格 = 0);
		int 开始星期首日(int 参数_开始星期首日 = 0);
		DOUBLE 今天(DOUBLE 参数_今天日期 = 0);
		DOUBLE 最大日期(DOUBLE 参数_最大日期 = 0);
		DOUBLE 最小日期(DOUBLE 参数_最小日期 = 0);
		int 最多选择天数(int 参数_最多选择天数);
		bool 置选择日期范围(DOUBLE 参数_首选择日, DOUBLE 参数_尾选择日);
		bool 取选择日期范围(DOUBLE& 参数_首选择日, DOUBLE& 参数_尾选择日);
		DOUBLE 选择日期(DOUBLE 参数_选择日期);
		int 滚动月数(int 参数_滚动月数);
		bool 置颜色(int 参数_颜色值, int 参数_标志) { return sendMsg(MCM_SETCOLOR, 参数_标志, 参数_颜色值) != -1; }
		int 取颜色(int 参数_标志) { return (int)sendMsg(MCM_GETCOLOR, 参数_标志, 0); }
		//@备注 每一个成员的0-30比特位表示每天的状态
		bool 置天日状态(std::vector<int>& 参数_状态数组) {
			return sendMsg(MCM_SETDAYSTATE, 参数_状态数组.size(), (LPARAM)&参数_状态数组[0]) != 0;
		}
		//@备注 函数 整型 OnDateSelChange(HWND hWnd,日期时间型 起始日期,日期时间型 结束日期)
		void 事件_选择日期被改变(TRegEvent* 参数_事件指针) { SetRegEvent(L"OnDateSelChange", 参数_事件指针); }
		//@备注 函数 整型 OnGetDayState(HWND hWnd,日期时间型 日期,整数型 月份数,[整数型,参考-1] 状态数组指针【每一个成员的0-30比特位表示每天的状态】)
		void 事件_取天日状态(TRegEvent* 参数_事件指针) { SetRegEvent(L"OnGetDayState", 参数_事件指针); }
	};

}

